﻿#region License

// PentaBiz - Sustainable Software Development Framework Copyright (C) 2013 Zoltán Csizmazia
// 
// This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
// 
// This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 

#endregion

using System;
using System.CodeDom.Compiler;
using System.Collections.Specialized;
using System.IO;

namespace PentaBiz.Cloud.CloudDb.RemotableMessages
{
    [Serializable]
    public class CompilationResultMessage
    {
        public CompilationResultMessage(Guid compilerIdentifier, CompilerErrorCollection errors, StringCollection output,
                                        string pathToAssembly, bool includeDebugInformation)
        {
            CompilerErrors = errors;
            CompilerOutput = output;
            PathToAssembly = pathToAssembly;
            IncludeDebugInformation = includeDebugInformation;
            CompilerIdentifier = compilerIdentifier;
            CreatedAt = DateTime.Now;
        }

        public Guid CompilerIdentifier { get; private set; }
        public DateTime CreatedAt { get; private set; }
        public CompilerErrorCollection CompilerErrors { get; private set; }
        public StringCollection CompilerOutput { get; private set; }
        public string PathToAssembly { get; private set; }
        public bool IncludeDebugInformation { get; private set; }

        public byte[] ReadAssembly()
        {
            if (PathToAssembly == null)
                throw new InvalidOperationException("Path to Assembly has not been set!");

            return File.ReadAllBytes(PathToAssembly);
        }

        public byte[] ReadPdb()
        {
            if (PathToAssembly == null)
                throw new InvalidOperationException("Path to Assembly has not been set!");

            string file = PathToAssembly.Remove(PathToAssembly.Length - 4) + ".pdb";
            return File.ReadAllBytes(file);
        }
    }
}